package fwmpc.centre;

import fwmpc.adapter.IWeiXinServerConfigurerAdapter;
import fwmpc.service.IWeiXinManagerService;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.config.AbstractFactoryBean;
import org.springframework.context.annotation.Bean;

/**
 * 类描述:  微信管理中心
 *
 * @author 王雷
 * @version 1.0.0
 * @date 2021/1/19 0019 下午 4:17
 */
public class WeiXinManagerCentre {

    /**
     * 属性描述：微信服务配置适配器
     *
     * @date : 2021/1/19 0019 下午 4:42
     */
    private final IWeiXinServerConfigurerAdapter iWeiXinServerConfigurerAdapter;

//    /**
//     * 属性描述：微信通讯配置对象
//     *
//     * @date : 2021/1/21 0021 下午 9:49
//     */
//    private final InteriorWeiXinInteractionConfig interiorWeiXinInteractionConfig;
//
//    /**
//     * 属性描述：微信属性配置对象
//     *
//     * @date : 2021/1/21 0021 下午 9:49
//     */
//    private final InteriorWeiXinPropertiesConfig interiorWeiXinPropertiesConfig;
//
//    /**
//     * 属性描述：微信存储配置对象
//     *
//     * @date : 2021/1/21 0021 下午 9:50
//     */
//    private final InteriorWeiXinStoreConfig interiorWeiXinStoreConfig;
//
//    /**
//     * 属性描述：微信业务处理对象
//     *
//     * @date : 2021/1/21 0021 下午 9:50
//     */
//    private final InteriorWeiXinManagerServerConfig interiorWeiXinManagerServerConfig;

    /**
     * 功能描述：微信管理中心
     *
     * @author : 王雷
     * @date : 2021/1/19 0019 下午 4:42
     */
    public WeiXinManagerCentre(IWeiXinServerConfigurerAdapter iWeiXinServerConfigurerAdapter) {
        this.iWeiXinServerConfigurerAdapter = iWeiXinServerConfigurerAdapter;
        /*interiorWeiXinInteractionConfig = new InteriorWeiXinInteractionConfig();
        interiorWeiXinPropertiesConfig = new InteriorWeiXinPropertiesConfig();
        interiorWeiXinStoreConfig = new InteriorWeiXinStoreConfig();
        interiorWeiXinManagerServerConfig = new InteriorWeiXinManagerServerConfig();*/
    }

    /*@PostConstruct
    public void init() {
        //通讯配置
        iWeiXinServerConfigurerAdapter.config(interiorWeiXinInteractionConfig);
        //属性配置
        iWeiXinServerConfigurerAdapter.config(interiorWeiXinPropertiesConfig);
        //存储配置
        iWeiXinServerConfigurerAdapter.config(interiorWeiXinStoreConfig);
        iWeiXinServerConfigurerAdapter.config(interiorWeiXinManagerServerConfig);
    }*/

    @Bean
    public FactoryBean<IWeiXinManagerService> iWeiXinManagerService() throws Exception {
        return new AbstractFactoryBean<IWeiXinManagerService>() {

            /**
             * 功能描述：实例类型
             * @author : 王雷
             * @date : 2021/1/19 0019 下午 9:05
             */
            @Override
            public Class<?> getObjectType() {
                return IWeiXinManagerService.class;
            }

            /**
             * 功能描述：对象实例
             * @author : 王雷
             * @date : 2021/1/19 0019 下午 9:05
             */
            @Override
            protected @NotNull IWeiXinManagerService createInstance() throws Exception {
                return iWeiXinServerConfigurerAdapter.managerConfig();
            }

            /**
             * 功能描述：对象是否单例
             * <br />
             * true是单例，false是非单例
             * <br />
             * 在Spring5.0中此方法利用了JDK1.8的新特性变成了default方法，返回true
             * @author : 王雷
             * @date : 2021/1/19 0019 下午 9:06
             */
            @Override
            public boolean isSingleton() {
                return super.isSingleton();
            }
        };
    }

//    /**
//     * 类描述: 微信通讯配置对象——内部
//     *
//     * @author : 王雷
//     * @date : 2021/1/19 0019 下午 8:16
//     */
//    private static class InteriorWeiXinInteractionConfig extends WeiXinInteractionConfig {
//        /**
//         * 功能描述：微信通讯配置对象——内部
//         *
//         * @author : 王雷
//         * @date : 2021/1/19 0019 下午 8:16
//         */
//        public InteriorWeiXinInteractionConfig() {
//            super();
//        }
//
//        /**
//         * 功能描述：微信通讯配置对象
//         *
//         * @author : 王雷
//         * @date : 2022/6/30 0030 上午 10:55
//         */
//        @Override
//        protected IWeiXinInteraction giveWeiXinInteraction() {
//            return super.giveWeiXinInteraction();
//        }
//    }
//
//    /**
//     * 类描述: 微信属性配置对象——内部
//     *
//     * @author : 王雷
//     * @date : 2021/1/19 0019 下午 8:16
//     */
//    private static class InteriorWeiXinPropertiesConfig extends WeiXinPropertiesConfig {
//        /**
//         * 功能描述：微信属性配置对象——内部
//         *
//         * @author : 王雷
//         * @date : 2021/1/19 0019 下午 8:16
//         */
//        public InteriorWeiXinPropertiesConfig() {
//            super();
//        }
//
//        /**
//         * 功能描述：微信属性配置对象
//         *
//         * @author : 王雷
//         * @date : 2022/6/30 0030 上午 10:55
//         */
//        @Override
//        protected IWeiXinCommonAttribute giveWeiXinCommonAttribute() {
//            return super.giveWeiXinCommonAttribute();
//        }
//    }
//
//    /**
//     * 类描述: 微信存储配置对象——内部
//     *
//     * @author : 王雷
//     * @date : 2021/1/19 0019 下午 8:16
//     */
//    private static class InteriorWeiXinStoreConfig extends WeiXinStoreConfig {
//        /**
//         * 功能描述：微信存储配置对象——内部
//         *
//         * @author : 王雷
//         * @date : 2021/1/19 0019 下午 8:16
//         */
//        public InteriorWeiXinStoreConfig() {
//            super();
//        }
//
//        /**
//         * 功能描述：微信存储配置对象
//         *
//         * @author : 王雷
//         * @date : 2022/6/30 0030 上午 10:55
//         */
//        @Override
//        protected IWeiXinAttributeStore giveWeiXinAttributeStore() {
//            return super.giveWeiXinAttributeStore();
//        }
//    }
//
//    /**
//     * 类描述: 微信业务处理对象——内部
//     *
//     * @author : 王雷
//     * @date : 2021/1/19 0019 下午 8:16
//     */
//    private static class InteriorWeiXinManagerServerConfig extends WeiXinManagerServerConfig {
//        /**
//         * 功能描述：微信存储配置对象——内部
//         *
//         * @author : 王雷
//         * @date : 2021/1/19 0019 下午 8:16
//         */
//        public InteriorWeiXinManagerServerConfig() {
//            super();
//        }
//
//        /**
//         * 功能描述：微信存储配置对象
//         *
//         * @author : 王雷
//         * @date : 2022/6/30 0030 上午 10:55
//         */
//        @Override
//        protected IWeiXinManagerService giveWeiXinManagerService() {
//            return super.giveWeiXinManagerService();
//        }
//    }
}
